package com.itheima.controller;

import com.itheima.annotation.Log;
import com.itheima.entity.Dept;
import com.itheima.entity.Result;
import com.itheima.service.DeptService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
@Slf4j//日志
@RequestMapping("/depts")//路径归纳
@RestController//等价于下面两个之和
//@Controller//返回数据时，将数据转换成json格式的数据
//@ResponseBody//将返回的对象或集合对象转换成json格式的数据
public class DeptController {
    //@RequestMapping(value = "/depts",method = RequestMethod.GET)//映射请求
//    @GetMapping("/depts")//限制请求方式为Get
//    public Result getAll(){
//        //1.加载并读取dept.txt文件
//        //通过类加载器，可以获取到类路径下的所有资源s
//        InputStream input = this.getClass().getClassLoader().getResourceAsStream("dept.txt");
//        List<String> strings = IOUtils.readLines(input, "UTF-8");
//        //2.解析文本中的数据并将其封装成集合
//        List<Dept>depts=strings.stream().map((str)->{
//            String[] parts = str.split(",");
//            Integer id=Integer.valueOf(parts[0]);
//            String name = parts[1];
//            LocalDateTime updateTime = LocalDateTime.parse(parts[2], DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
//            return new Dept(id, name, updateTime);
//        }).toList();
//    private DeptService dept=new DeptServiceImpl();
//    @Autowired//自动寻找对象
////    @Qualifier("service")
//
//    @Resource (name="deptServiceImpl")//寻找对象
//    private DeptService dept;
    @Autowired
    private DeptService deptService;
    @GetMapping//限制请求方式为Get
    public Result list(){
        List<Dept>depts=deptService.list();
        return Result.success(depts);
    }

    @Log
    @DeleteMapping
    public Result delete(Integer id)//方法1：HttpServletRequest  request，方法二：@RequestParam(value = "id",required = false) Integer deptId
    {
        //方式1：最原始的方式获取请求参数
//        String id = request.getParameter("id");
//        int idInt = Integer.parseInt(id);
//        System.out.println(idInt);
        //方式2：使用RequestParam注解,加上之后一定要传参，否则报错400,如果需要解除限制，可以选择增加required属性为false
        log.info("id={}",id);
        //调用Service的删除方法
        deptService.delete(id);
        return Result.success();
    }
    @Log
    @PostMapping
    public Result save(@RequestBody Dept dept){//@RequestBody注解，将请求体中的json数据转换成java对象
        log.info("dept={}",dept);
        deptService.save(dept);
        return Result.success();
    }
    @GetMapping("/{id}")
    public Result getById(@PathVariable Integer id){//@PathVariable注解，将路径中的参数值赋值给方法参数
        log.info("id={}",id);
        Dept dept=deptService.getByid(id);
        return Result.success(dept);
    }
    @Log
    @PutMapping
    public Result update(@RequestBody Dept dept){
        log.info("dept={}",dept);
        deptService.update(dept);
        return Result.success();
    }
}
